package com.anfeng.cms.service.impl.org;

import com.anfeng.cms.common.Common;
import com.anfeng.cms.domain.org.AfPost;
import com.anfeng.cms.repository.mysql.dao.org.AfPostMapper;
import com.anfeng.cms.service.org.IAfPostService;
import com.anfeng.cms.util.IdGeneratorUtil;
import com.anfeng.cms.util.JsonMapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 吴朋
 * @since 2019-07-15
 */
@Service
@Slf4j
public class AfPostServiceImpl extends ServiceImpl<AfPostMapper, AfPost> implements IAfPostService {

    /**
     * 根据岗位名称新增岗位信息
     *
     * @param name 岗位名字
     * @return 岗位id
     */
    @Override
    public String addPost(String name) {
        if (StringUtils.isBlank(name)) {
            log.error("新增岗位信息失败 传入参数为空");
            return null;
        }
        // 先查询是否存在
        AfPost afPost = this.getPostByName(name);
        if (null != afPost) {
            return afPost.getId();
        }
        // 不存在就新增
        afPost = new AfPost();
        String postId = IdGeneratorUtil.uuid();
        afPost.setId(postId);
        afPost.setName(name);
        afPost.setState(Common.DATA_STATE_NORMAL);
        Date currentDate = new Date();
        afPost.setCreateTime(currentDate);
        afPost.setModifiedTime(currentDate);
        boolean result = this.insert(afPost);
        if (!result) {
            log.error("新增岗位信息失败 岗位名称 {}", name);
            return null;
        }
        return postId;
    }

    /**
     * 修改职位是否禁用
     *
     * @param postId 职位id
     * @param state  是否禁用
     * @return 修改状态
     */
    @Override
    public int updatePostState(String postId, Integer state) {
        if (StringUtils.isBlank(postId) || state == null || (state != Common.DATA_STATE_NORMAL && state != Common.DATA_STATE_DELETE)) {
            log.error("更新岗位是否禁用状态出错 传入参数 有误");
            return Common.RETURN_FAILED;
        }
        // 根据post id 查询 岗位信息
        AfPost afPost = this.selectById(postId);
        if (null == afPost) {
            log.error("根据岗位id {} 未查询到相关岗位信息", postId);
            return Common.RETURN_FAILED;
        }
        // 存在 判断状态是否一致
        if (state.equals(afPost.getState())) {
            log.info("修改是否禁用 状态一致  无需修改");
            return Common.RETURN_SUCCESS;
        }
        afPost.setState(state);
        afPost.setModifiedTime(new Date());
        boolean result = this.updateById(afPost);
        if (!result) {
            log.error("更新岗位禁用状态失败 postId:{}  state:{}", postId, state);
            return Common.RETURN_FAILED;
        }
        return Common.RETURN_SUCCESS;
    }

    /**
     * 获取所有的职位信息
     *
     * @return 职位信息
     */
    @Override
    public List<AfPost> getAllPosts() {
        AfPost afPost = new AfPost();
        afPost.setState(Common.DATA_STATE_NORMAL);
        EntityWrapper<AfPost> wrapper = new EntityWrapper<>();
        wrapper.setEntity(afPost);
        return this.selectList(wrapper);
    }

    /**
     * 根据职位名称 获取职位信息
     *
     * @param postName 职位名称
     * @return 职位信息
     */
    @Override
    public AfPost getPostByName(String postName) {
        if (StringUtils.isBlank(postName)) {
            log.error("根据岗位名称查询岗位信息 传入参数有误");
            return null;
        }
        AfPost afPost = new AfPost();
        afPost.setState(Common.DATA_STATE_NORMAL);
        afPost.setName(postName);
        EntityWrapper<AfPost> wrapper = new EntityWrapper<>();
        wrapper.setEntity(afPost);
        return this.selectOne(wrapper);
    }

    /**
     * 更新岗位 信息
     *
     * @param afPost 岗位信息
     * @return 是否成功 1 成功 -1 失败
     */
    @Override
    public int updatePostInfo(AfPost afPost) {
        if (null == afPost || StringUtils.isBlank(afPost.getId())) {
            log.error("更新岗位信息 传入参数有误");
            return Common.RETURN_FAILED;
        }
        afPost.setModifiedTime(new Date());
        boolean result = this.updateById(afPost);
        if (!result) {
            log.error("更新岗位信息失败 岗位信息 {}", JsonMapper.defaultMapper().toJson(afPost));
            return Common.RETURN_FAILED;
        }
        return Common.RETURN_SUCCESS;
    }

    /**
     * 根据id 获取岗位信息
     *
     * @param postId 岗位id
     * @return 岗位信息
     */
    @Override
    public AfPost getPostById(String postId) {
        if (StringUtils.isBlank(postId)) {
            log.error("根据岗位id查询岗位信息 传入参数有误");
            return null;
        }
        AfPost afPost = new AfPost();
        afPost.setState(Common.DATA_STATE_NORMAL);
        afPost.setId(postId);
        EntityWrapper<AfPost> wrapper = new EntityWrapper<>();
        wrapper.setEntity(afPost);
        return this.selectOne(wrapper);
    }
}
